import pandas as pd
import numpy as np

df = pd.read_excel('path')  # 读取数据不设置索引
df.set_index('name')  # 设置索引
df.set_index(['name', 'team'])  # 设置两层索引
df.set_index([df.name.str[0], 'name'])  # 将姓名的第一个字母和姓名设置为索引

df = df.set_index('name')  # 赋值
df.set_index('name', inplace=True)

# 可以将一个Series指定为索引
s = pd.Series([i for i in range(100)])
df.set_index(s)  # 指定一个索引
df.set_index([s, 'name'])  # 同时指定索引和现有字段
df.set_index([s, s ** 2])  # 计算索引

df.set_index('month', drop=False)  # 保留原列
df.set_index('month', append=True)  # 保留原来的索引

# 修改列索引
df.rename(columns={"A": "a", "B": "c"})
df.rename(str.lower, axis='columns')

# 修改行索引
df.rename(index={0: "x", 1: "y", 2: "z"})
df.rename({1: 2, 2: 4}, axis='index')

# 修改数据类型
df.rename(index=str)

df.index.name  # 名称
df.index.array  # array数组
df.index.dtype  # 数据类型
df.index.shape  # 形状
df.index.size  # 元素数量
df.index.values  # array数组

df.index.empty  # 是否为空
df.index.is_unique  # 是否不重复
df.index.names  # 名称列表
df.index.is_all_dates  # 是否全是日期时间
df.index.has_duplicates  # 是否有重复值


# 常用
df.index.astype('int64')  # 转换类型
df.index.isin()  # 是否存在
df.index.rename('number')  # 修改索引名称
df.index.nunique()  # 不重复值的数量
df.index.sort_values(ascending=False, )  # 排序，倒序
df.index.map(lambda x: x + ' ')  # map函数处理
df.index.str.replace(' ', '')  # str替换
df.index.str.split('_')  # 分隔
df.index.to_list()  # 转为列表
df.index.to_frame(index=False, name='a')  # 转换成DataFrame
df.index.to_series()  # 转为series
df.index.to_numpy()  # 转为numpy
df.index.unique()  # 去重
df.index.value_counts()  # 去重及计数
df.index.where(df.index == 'a')  # 筛选
df.index.rename('grade', inplace=False)  # 重命名索引
df.index.rename(['species', 'year'])  # 多层，重命名索引
df.index.max()
df.index.argmax()  # 最大索引值
df.index.any()
df.index.all()
df.index.T  # 转置